#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
User MSISDN替换脚本
"""

import pandas as pd
import random
import string
import json

def generate_random_msisdn(prefix='138', length=11):
    """
    生成随机MSISDN号码
    :param prefix: 号码前缀
    :param length: 号码总长度
    :return: 随机生成的MSISDN
    """
    remaining_length = length - len(prefix)
    random_digits = ''.join(random.choices(string.digits, k=remaining_length))
    return prefix + random_digits

def replace_user_msisdn(input_file, output_file):
    """
    替换用户MSISDN
    :param input_file: 输入CSV文件路径
    :param output_file: 输出CSV文件路径
    """
    # 读取CSV文件
    df = pd.read_csv(input_file)
    
    # 创建MSISDN映射字典，保证同一个原始号码映射到同一个新号码
    msisdn_mapping = {}
    
    # 假设MSISDN列名为 'MSISDN' 或 'msisdn'，请根据实际情况调整
    msisdn_column = 'MSISDN'  # 根据实际列名修改
    
    if msisdn_column in df.columns:
        unique_msisdns = df[msisdn_column].unique()
        
        for msisdn in unique_msisdns:
            if pd.notna(msisdn):
                new_msisdn = generate_random_msisdn()
                # 确保生成的号码唯一
                while new_msisdn in msisdn_mapping.values():
                    new_msisdn = generate_random_msisdn()
                msisdn_mapping[msisdn] = new_msisdn
        
        # 替换MSISDN
        df[msisdn_column] = df[msisdn_column].map(lambda x: msisdn_mapping.get(x, x))
    
    # 保存到新文件
    df.to_csv(output_file, index=False, encoding='utf-8')
    print(f"处理完成！共替换 {len(msisdn_mapping)} 个不同的MSISDN")
    print(f"结果已保存到: {output_file}")

if __name__ == "__main__":
    # 输入输出文件路径
    input_file = r"/Users/liuyihua/Code/p5_cmcc/filter_data_csv/100/user.csv"
    output_file = "user_replaced.csv"
    
    replace_user_msisdn(input_file, output_file)

    # 读取数据
    user_df = pd.read_csv(r'/Users/liuyihua/Code/p5_cmcc/filter_data_csv/100/user.csv')

    # 创建新的DataFrame,保留所有原始列
    user_new = user_df.copy()

    # 只转换MSISDN列:将16进制字符串转换为整数
    user_new['MSISDN'] = user_df['MSISDN'].apply(lambda x: int(x, 16))

    # 保存结果
    user_new.to_csv('user_msisdn_converted.csv', index=False)

    # 显示处理结果
    print("User 表处理结果：")
    print(user_new.head())
    print(f"\nUser 表形状: {user_new.shape}")
    print("\n列信息:")
    print(user_new.dtypes)
    print("\nMSISDN转换示例:")
    print(f"原始: {user_df['MSISDN'].iloc[0]}")
    print(f"转换后: {user_new['MSISDN'].iloc[0]}")